package org.example.backend.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 数据统计Mapper接口
 */
@Mapper
public interface StatisticsMapper {

    /**
     * 获取用户总数
     *
     * @return 用户总数
     */
    Long selectUserCount();

    /**
     * 获取订单总数
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 订单总数
     */
    Long selectOrderCount(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 获取销售总额
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 销售总额
     */
    BigDecimal selectTotalSales(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 获取商品总数
     *
     * @return 商品总数
     */
    Long selectProductCount();

    /**
     * 获取待处理订单数
     *
     * @return 待处理订单数
     */
    Long selectPendingOrderCount();

    /**
     * 获取最近7天每日订单数
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 每日订单数
     */
    List<Map<String, Object>> selectOrderCountByDay(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 获取最近7天每日销售额
     *
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return 每日销售额
     */
    List<Map<String, Object>> selectSalesByDay(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 获取各状态订单数量
     *
     * @return 各状态订单数量
     */
    List<Map<String, Object>> selectOrderCountByStatus();

    /**
     * 获取热销商品排行
     *
     * @param limit 限制数量
     * @return 热销商品排行
     */
    List<Map<String, Object>> selectHotProducts(@Param("limit") Integer limit);
} 